package com.atguigu.gmall.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import com.atguigu.gmall.bean.UserAddress;
import com.atguigu.gmall.service.OrderService;
import com.atguigu.gmall.service.UserService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;


/**
 * 1、将服务提供者注册到注册中心（暴露服务）
 * 		1）、导入dubbo依赖（2.6.2）\操作zookeeper的客户端(curator)
 * 		2）、配置服务提供者
 * 
 * 2、让服务消费者去注册中心订阅服务提供者的服务地址
 * @author lfy
 *
 */
@Component
public class OrderServiceImpl implements OrderService {

	/**
	 * 不能使用@Autowired
	 * 调用dubbo远程提供者的实体类注入，url:绕过zookeeper注册中心，通过dubbo直连提供者端口
	 * loadbalance:指定负载均衡机制，服务端，客户端都可以配置，默认是 Random随机机制
	 */
//	@Reference(url = "127.0.0.1:20880") //dubbo直连，绕过注册中心，以及监控中心
	@Reference(loadbalance = "Random")	//正常远程调用
	UserService userService;

	/**
	 * @HystrixCommand(fallbackMethod = "hello")：
	 * 		当这个方法出现异常的时候，调用hello方法进行处理
	 */
	@HystrixCommand(fallbackMethod = "hello")
	@Override
	public List<UserAddress> initOrder(String userId) {
		//打印用户id
		System.out.println("用户ID："+userId);
		//查询用户的收货地址
		List<UserAddress> userAddressList = userService.getUserAddressList(userId);
		//循环打印
		for (UserAddress userAddress : userAddressList) {
			System.out.println(userAddress);
		}
        return userAddressList;
    }

	public List<UserAddress> hello(String userId) {
		System.out.println("远程调用出错了，hello，，，，，，，，，，，");
		return null;
	}
}
